home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Games / Tetris / Source / Parser.m < prev    next >
Text File  |  1972-02-16  |  3KB  |  157 lines

  1. /*
  2.  * This object parses a Settings file for Tetris.
  3.  * It is intended to eventually be a general purpose parser.
  4.  */
  5. /*
  6.   Variables are case insensitive
  7. CurrentLevel := 5;
  8. ColorOn := YES;
  9. ShowNextPiece := YES;
  10. BlockImageList[0] := "/Users/MonoBlock1";
  11. BlockImageList[1] := "MonoBlock2";
  12. BlockImageList[2] := "MonoBlock3";
  13. BlockImageList[3] := "MonoBlock4";
  14. */
  15.  
  16. char *typesString = {"integer", "char", "float", "bool", "string", "list"};
  17.  
  18. #import "Parser.h"
  19.  
  20. @implementation Parser
  21.  
  22. - init
  23. {
  24.     [super init];
  25.     symbolTable = malloc(sizeof(symbolEntry) * 100);
  26.     if (symbolTable == NULL) {
  27.         fprintf(stderr, "Couldn't allocate memory for symbol table\n");
  28.     }
  29.     lastSymbolNum = 0;
  30.  
  31.     return self;
  32. }
  33.  
  34. - dumpSymbolTable
  35. {
  36.     int i;
  37.     symbolEntry *s;
  38.  
  39.     printf("name   link   type  value  valuePtr  level\n");
  40.  
  41.     for (i=0; i<lastSymbolNum; i++) {
  42.         s = symbolTable[i];
  43.         printf("%s", s->name);
  44.         printf("%d", s->link);
  45.         printf("%s", s->typesString[i]);
  46.         printf("%d", s->value);
  47.         printf("%d", s->valuePtr);
  48.         printf("%d", s->level);
  49.     }
  50.     return self;
  51. }
  52.  
  53. - (symbolEntry *) allocateSymbol
  54. {
  55.     symbolEntry *tmp; 
  56.     tmp = (symbolEntry *) malloc(sizeof(symbolEntry));
  57.     if (tmp == NULL) {
  58.         fprintf(stderr, "Couldn't allocate enough memory for a new symbol\n");
  59.         fprintf(stderr, "There are currently %d entries in the symbol table\n",
  60.                   lastSymbolNum - 1);
  61.         exit(0);
  62.     }
  63.     return tmp; 
  64. }
  65.  
  66.  
  67. - (int) addBoolSymbol:(char *) name :(BOOL) value
  68. {
  69.     int i = lastSymbolNum++;
  70.  
  71.     symbolTable[i] = [self allocateSymbol];
  72.  
  73.     symbolTable[i].name = (char *)malloc(strlen(name) + 1);
  74.     strcpy(symbolTable[i]->name, name);
  75.     symbolTable[i].link = lastSymbolNum; // Builtins always ref. next cell.
  76.     symbolTable[i].type = BOOLEAN;
  77.     symbolTable[i].level = 0;
  78.     symbolTable[i]-> value = (int)value;
  79.  
  80.     return symbol;
  81. }
  82.  
  83. - (int) addIntSymbol:(char *) name :(int) value
  84. {
  85.     int i = lastSymbolNum++;
  86.  
  87.     symbolTable[i] = [self allocateSymbol];
  88.  
  89.     symbolTable[i].name = (char *)malloc(strlen(name) + 1);
  90.     strcpy(symbolTable[i]->name, name);
  91.     symbolTable[i].link = lastSymbolNum; // Builtins always ref. next cell.
  92.     symbolTable[i].type = INTEGER;
  93.     symbolTable[i].level = 0;
  94.     symbolTable[i].value = value;
  95.  
  96.     return symbol;
  97. }
  98.  
  99. - parseList:(char) value :(char *) str
  100. {
  101.     if (str[0] != '['
  102.     return self;
  103. }
  104.  
  105. - (int) addListSymbol:(char *) name :(char *) value
  106. {
  107.     int i = lastSymbolNum++;
  108.  
  109.     symbolTable[i] = [self allocateSymbol];
  110.  
  111.     symbolTable[i]->name = (char *)malloc(strlen(name) + 1);
  112.     strcpy(symbolTable[i]->name, name);
  113.     symbolTable[i].link = lastSymbolNum; // Builtins always ref. next cell.
  114.     symbolTable[i].type = LIST;
  115.     symbolTable[i].level = 0;
  116.     symbolTable[i]->value = value;
  117.  
  118.     return symbol;
  119. }
  120.  
  121. - addBuiltIns
  122. {
  123.     [self addIntSymbol:"currentLevel" : 5];
  124.     [addBoolSymbol:"colorOn" :YES];
  125.     [addBoolSymbol:"showNextPiece" :YES];
  126.     [addListSymbol:"BlockImageList",  "[MonoBlock1, MonoBlock2, MonoBlock3, MonoBlock4]"] ;
  127.  
  128.     [self dumpSymbolTable];
  129.     return self;
  130. }
  131.  
  132.  
  133. - saveSettings:sender
  134. {
  135.  
  136.     return self;
  137. }
  138.  
  139. /*
  140.  * Purpose: Parse a scenerio file.
  141.  * 
  142.  * Attribute value pairs
  143.  */
  144. - parse:(const char *)fileName
  145. {
  146.  
  147.  
  148.     return self;
  149. }
  150.  
  151. - free
  152. {
  153.     free(symbolTable);
  154.     return self;
  155. }
  156. @end
  157.